import pandas as pd
from tqdm import tqdm

progress_bar = tqdm(total=100, desc=f"正在执行")

# 加载数据
shuju = pd.read_excel('excel_hwn/全店数据订单3.xlsx', dtype={'商品原价销售额': int, '订单编号': str, '商品SKU码': str})
# 转换数据类型
shuju = shuju[['订单编号', '优惠活动', '商品SKU码', '商品原价销售额', '商品名称']]

progress_bar.update(30)

# 加载数据2
mendian = pd.read_excel('excel_hwn/全部门店.xlsx', dtype={'订单号': str}, sheet_name=1)
bucanjia = pd.read_excel('excel_hwn/不参加.xlsx', dtype={'商品编码': str})
# 加载优惠卷明细
quan = pd.read_excel('excel_hwn/费用承担.xlsx', sheet_name=1)

progress_bar.update(30)

# 合并两个数据表
shuju['订单编号'] = shuju['订单编号'].str.strip()
mendian['订单号'] = mendian['订单号'].str.strip()

hebing = pd.merge(shuju, mendian, left_on='订单编号', right_on='订单号', how='left').drop_duplicates()
# hebing.to_excel('完成测试11.xlsx', index=False)

# 过滤是外卖订单的行
hebing = hebing[hebing['交易类型'].apply(lambda x: x == "外卖订单")]


# 把券中所有的活动都添加到合并表中
def tianjia(row):
    if not row['活动'] in hebing.columns:
        hebing[f'{row["活动"]}'] = 0


quan.apply(tianjia, axis=1)


# 判断类型函数
def panduanLeixing(row):
    # 如果配送方式小于4个长度
    if len(str(row)) < 4:
        return 5
    # 如果是美团开头的就都是自营
    if str(row)[0:2] == '美团':
        return 1
    # 否则就都是供应商
    else:
        return 0


# 全部数据过滤
hebing['代理类型'] = hebing['配送方式'].apply(panduanLeixing)


# 核心对比函数
def customOperation(row):
    # 找到一行中所有优惠活动 并用/分割
    activities = str(row['优惠活动']).split('/')

    # 供应商承担费用置零
    gongyingshang = 0
    gongsichengdan = 0

    # 匹配多个活动项目
    for active in activities:

        # 找到一行中所有匹配项  匹配quan表中活动列的每一项
        # 活动可以跟优惠卷明细匹配
        matches = quan[quan['活动'].apply(lambda x: x == active.strip())]
        # 对应的所有优惠卷明细来跟表中的 类型做对比，如果可以相等或者 等于2 就都可以计算  如果匹配不到就不管了
        matches = matches[matches['代理'].apply(lambda x: x == row['代理类型'] or x == 2)]
        # 主要：：门店承担  =  商家活动支出 - 供应商承担费用 - 平台费用 - 公司承担费用

        # 再把匹配到的所有数据 里面的 承担费用相加
        # 如果没有匹配到
        if len(matches) < 1:
            gongyingshang += 0
        # 把所有匹配到的项目供应商承担的总和相加
        else:
            hebing.loc[row.name, f'{active.strip()}'] = -(matches['供应商承担'].sum())
            gongyingshang += -(matches['供应商承担'].sum())
            gongsichengdan += -(matches['公司承担费用'].sum())
    # 新增字段
    hebing.loc[row.name, '供应商承担费用'] = -gongyingshang
    hebing.loc[row.name, '公司承担费用'] = -gongsichengdan
    hebing.loc[row.name, '门店承担费用'] = -((-row['商家活动支出']) - gongyingshang - gongsichengdan)
    return row


# 所有数据经过自定义计算公式
hebing.apply(customOperation, axis=1)

# 找出不参加的
hebing['商品SKU码'] = hebing['商品SKU码'].str.strip()
bucanjia['商品编码'] = bucanjia['商品编码'].str.strip()
hebing = pd.merge(left=hebing, right=bucanjia, left_on='商品SKU码', right_on='商品编码', how='left',
                  indicator='bcj').drop_duplicates()
# 只保留参加的
hebing = hebing.query('bcj!="both"')


# 获取活动列的列表
activity_columns = quan['活动'].str.strip().tolist()


hebing.to_excel('测试33.xlsx', index=False)
hebing['订单总金额'] = hebing.groupby('订单编号')['商品原价销售额'].transform('sum')
# 使用广播运算进行计算
for column in activity_columns:
    hebing[f'{column}'] = hebing['商品原价销售额']/hebing['订单总金额']*hebing[f'{column}']

progress_bar.update(30)

# 生成新excel
hebing.to_excel("完成测试11.xlsx", index=False)

progress_bar.update(10)
progress_bar.close()

